<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 vector-feature-night-mode-enabled skin-theme-clientpref-os vector-sticky-header-enabled" lang="fr" dir="ltr"><head>
<meta charset="UTF-8">
<title>Programmation modulaire</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://fr.wikipedia.org/wiki/Programmation_modulaire"> <link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Programmation_modulaire rootpage-Programmation_modulaire skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Programmation modulaire</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="fr" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="fr" dir="ltr">
<p>En informatique, la <b>programmation modulaire</b> reprend l'idée de fabriquer un produit (le programme) à partir de composants (les modules).
</p><p>Elle décompose une <a href="Application_(informatique)" title="Application (informatique)">application</a> complexe en <a href="Module_(programmation)" title="Module (programmation)">modules</a>, groupes de fonctions, de méthodes et de traitement. Chaque élément peut ainsi être développé, amélioré et optimisé indépendamment. Puis, il est <a href="R%C3%A9utilisabilit%C3%A9" class="mw-redirect mw-disambig" title="Réutilisabilité">réutilisable</a> dans d'autres applications.
</p><p>Le développement du <a href="Code_source" title="Code source">code</a> des modules peut être attribué à des (groupes de) personnes différentes, qui effectuent leurs <a href="Tests_unitaires" class="mw-redirect" title="Tests unitaires">tests unitaires</a> indépendamment.
</p><p>Cette méthode de regroupement permet de réaliser une <a href="Encapsulation_(programmation)" title="Encapsulation (programmation)">encapsulation</a> comparable par certains aspects à celle de la <a href="Programmation_objet" class="mw-redirect" title="Programmation objet">programmation objet</a>, et permet l'organisation du code source en unités de travail logiques. Les modules définissent également des <a href="Espace_de_noms_(programmation)" title="Espace de noms (programmation)">espaces de noms</a> utiles lors de leur utilisation.
</p><p>La programmation modulaire n'implique pas l'usage d'un style de ou d'un <a href="Paradigme" title="Paradigme">paradigme</a> de <a href="Programmation" class="mw-redirect" title="Programmation">programmation</a> particulier ; les éléments qu'elle structure peuvent être de style <a href="Programmation_orient%C3%A9e_objet" title="Programmation orientée objet">objet</a>, <a href="Programmation_imp%C3%A9rative" title="Programmation impérative">impératif</a> ou <a href="Programmation_fonctionnelle" title="Programmation fonctionnelle">fonctionnel</a>.
</p><p>L'opposée de la programmation modulaire est le <a href="Raffinement" title="Raffinement">raffinement</a>.
</p><p>Ce style de programmation facilite grandement l'amélioration progressive, la ré-utilisabilité et le partage du code, et est particulièrement utile pour la réalisation de <a href="Biblioth%C3%A8que_(informatique)" class="mw-redirect" title="Bibliothèque (informatique)">bibliothèques</a>.
</p><p>De plus, suivant les <a href="Langage_de_programmation" title="Langage de programmation">langages de programmation</a>, les modules peuvent être paramétrés et/ou <a href="Polymorphisme_(informatique)" title="Polymorphisme (informatique)">polymorphes</a> (<a href="Foncteur" title="Foncteur">foncteur</a>) ce qui apporte une modularité dont la souplesse décuplée amène alors à parler de <a href="G%C3%A9n%C3%A9ricit%C3%A9" title="Généricité">généricité</a>.
</p><p>La <a href="Programmation_g%C3%A9n%C3%A9rique" class="mw-redirect" title="Programmation générique">programmation générique</a> est un sur-ensemble qui peut tirer avantageusement parti de la modularité apportée par la programmation modulaire.
</p>
<div class="mw-heading mw-heading2"><h2 id="Le_module_comme_composant">Le module comme composant</h2></div>
<p>Les composants sont souvent perçus en termes de boites noires / boites blanches.
</p><p>Un composant est vu comme une <a href="Bo%C3%AEte_noire_(syst%C3%A8me)" title="Boîte noire (système)">boîte noire</a> lorsqu'on ne s'intéresse qu'à son usage et son comportement. Il est défini, par exemple, par des spécifications, une notice d'emploi, un bornier : c'est le point de vue de l'utilisateur.
</p><p>Un composant est vu comme une <a href="Bo%C3%AEte_blanche" title="Boîte blanche">boîte blanche</a> lorsqu'on s'intéresse à son organisation et à son fonctionnement : c'est le point de vue du concepteur, du fabricant, du réparateur.
</p><p>De même, un module possèdera généralement :
</p>
<ul><li>une interface spécifiant les fonctions et procédures fournies à l'utilisateur ;</li>
<li>un corps les réalisant, à l'aide de toute variable, fonction ou procédure locale souhaitable ; cette localité sera une garantie contre des corruptions externes.</li></ul>
<p>Si le corps du module doit exister, seule la connaissance de l'interface est nécessaire à son emploi.
</p><p>Ainsi,
</p>
<ul><li>améliorer une application restera simple si on améliore le corps des modules critiques sans modifier leurs interfaces ;</li>
<li>réutiliser un module connu sera facile.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Languages_typiques">Languages typiques</h2></div>
<ul><li><a href="Modula-2" title="Modula-2">Modula 2</a></li>
<li><a href="Ada_(langage)" title="Ada (langage)">Ada</a></li>
<li><a href="Eiffel_(langage)" title="Eiffel (langage)">Eiffel</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Liens_externes">Liens externes</h2></div>
<p class="mw-empty-elt">
</p>
<ul><li class="mw-empty-elt"></li>
<li class="mw-empty-elt"></li>
<li class="mw-empty-elt"></li>
<li><div class="liste-horizontale"><span class="wd_identifiers"><a href="Autorit%C3%A9_(sciences_de_l'information)" title="Autorité (sciences de l'information)">Notices d'autorité</a></span> : <ul><li><span class="nowrap uid noarchive"><a rel="nofollow" class="external text" href="https://catalogue.bnf.fr/ark:/12148/cb133251240">BnF</a></span> (<span class="nowrap uid noarchive"><a rel="nofollow" class="external text" href="https://data.bnf.fr/ark:/12148/cb133251240">données</a></span>)</li> <li><span class="nowrap uid noarchive"><a rel="nofollow" class="external text" href="http://id.loc.gov/authorities/sh85086464">LCCN</a></span></li> <li><span class="nowrap uid noarchive"><a rel="nofollow" class="external text" href="https://id.ndl.go.jp/auth/ndlna/00567885">Japon</a></span></li> <li><span class="nowrap uid noarchive"><a rel="nofollow" class="external text" href="https://www.nli.org.il/en/authorities/987007541016305171">Israël</a></span></li> </ul></div></li></ul>
<ul id="bandeau-portail" class="bandeau-portail"><li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de la programmation informatique</span> </span></li> </ul></div><!--htdig_noindex--><div><div class="zim-footer">
Cet article est issu de <a class="external text" title="Dernière modification le 2025-05-05" href="https://fr.wikipedia.org/wiki/?title=Programmation_modulaire&oldid=225416117">Wikipédia</a>. Sauf mention contraire, le texte est disponible sous <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr">Creative Commons Attribution-Share Alike 4.0</a>. Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>